AWS ParallelCluster 各ノードの取得メトリクス追加方法
クラスターのモニタリング
ParallelClusterのヘッドノード、コンピュートノードのモニタリング設定します。
- AWS ParallelClusterはAWSがサポートする、HPCクラスターの管理ツールです。
- 各ノードにCloudWatchAgentを利用してメモリ使用率など取得メトリクスを追加します。
検証環境
項目 | 値 |
---|---|
ParallelCluster | 2.10.0 |
OS | Ubuntu 18.04 LTS |
AMI | aws-parallelcluster-2.10.0-ubuntu-1804-lts-hvm-arm64-202011172100 |
設定手順
下記が各ノードのメトリクス取得までの流れです。
- 各ノード起動時にスクリプトを実行する
- スクリプトでパラメータストアから設定ファイルを取得しCloudWatchAgentに反映させる
- CloudWatchAgentが追加のメトリクスをPutする
これを実現するためにParallelClusterの設定作業は下記になります。
- パラメータストアに設定ファイルを設置
- S3バケットに起動時実行用のスクリプトを配置
- 各ノードが起動時にS3バケット上のスクリプトを実行する
モニタリング内容の設定
AWS Systems ManagerのパラメータストアにCloudWatchAgentの追加設定ファイルを準備します。
pcluster-cloudwatch-config
の名前で作成しました。メモリ使用率、ディスクI/O取得の設定を値に登録してします。
パラメータストア値の内容
{ "metrics": { "append_dimensions": { "AutoScalingGroupName": "${aws:AutoScalingGroupName}", "ImageId": "${aws:ImageId}", "InstanceId": "${aws:InstanceId}", "InstanceType": "${aws:InstanceType}" }, "metrics_collected": { "disk": { "measurement": [ "used_percent", "inodes_free" ], "metrics_collection_interval": 60, "resources": [ "*" ] }, "diskio": { "measurement": [ "io_time", "write_bytes", "read_bytes", "writes", "reads" ], "metrics_collection_interval": 60, "resources": [ "*" ] }, "mem": { "measurement": [ "mem_used_percent" ], "metrics_collection_interval": 60 } } } }
クラスター起動時の設定
ParallelClusterのPostinstall機能を利用します。各ノード起動時パラメータストアに保存したテキスト(設定ファイル)を読み取ります。設定ファイルをCloudWatch Agentに反映させるスクリプトを準備します。
スクリプトファイル作成
amazon-cloudwatch-agent-ctlコマンドでパラメータストアに保存した設定ファイルを読み込む内容です。
ssm:pcluster-cloudwatch-config
の部分はパラメータストアで作成した名前を入力します。
#!/usr/bin/env bash # Add config to CloudWatch Agent amazon-cloudwatch-agent-ctl -a append-config -m ec2 -s -c ssm:pcluster-cloudwatch-config
S3バケット作成
スクリプトファイルはS3バケットに保存します。適当なバケット作成します。スクリプトファイルをアップロードします。
バケット作成。
ファイルをアップロード。
クラスター設定
CloudWatchAgentの設定ファイル追加で必要な箇所は下記です。
- S3バケットへ読み取りアクセスのための設定
- スクリプトファイルの実行パスの設定
- パラメータストアに読み取りアクセスのためのポリシー追加
s3_read_resource = arn:aws:s3:::pcluster-postinsall/* # pcluster-postinstallは任意のS3バケット名を指定 post_install = s3://pcluster-postinsall/postinstall.sh # pcluster-postinsall/postinstall.shは任意のスクリプトファイルのパスを指定 additional_iam_policies = arn:aws:iam::aws:policy/AmazonSSMReadOnlyAccess
クラスター設定ファイル全文
検証時の設定ファイル内容です。下記の項目は環境に依存します。
- aws_region_name
- key_name
- vpc_id
- master_subnet_id
- compute_subnet_id
[aws] aws_region_name = us-east-1 [global] cluster_template = default update_check = true sanity_check = true [aliases] ssh = ssh {CFN_USER}@{MASTER_IP} {ARGS} [cluster default] key_name = sandbox-key-useast1 base_os = ubuntu1804 scheduler = slurm vpc_settings = custom s3_read_resource = arn:aws:s3:::pcluster-postinsall/* post_install = s3://pcluster-postinsall/postinstall.sh additional_iam_policies = arn:aws:iam::aws:policy/AmazonSSMReadOnlyAccess # Instance Type master_instance_type = c6g.large # Queue queue_settings = 2x, 16x # Tag tags = { "Name" : "MultiQueue-Cluster" } # --- VPC Setting --- [vpc custom] vpc_id = vpc-07edfc27679c9ca80 master_subnet_id = subnet-0ab2754446b2f87a4 compute_subnet_id = subnet-0ab2754446b2f87a4 use_public_ips = true # --- EBS Setting --- [ebs external_ebs] shared_dir = /shared volume_type = gp2 volume_size = 20 # --- ComputeNode Setting --- [queue 2x] compute_resource_settings = 2x placement_group = DYNAMIC compute_type = spot [queue 16x] compute_resource_settings = 16x placement_group = DYNAMIC compute_type = spot [compute_resource 2x] instance_type = c6g.2xlarge max_count = 32 [compute_resource 16x] instance_type = c6g.16xlarge max_count = 8
クラスター作成
pcluster createコマンドで任意の管理名称を設定し、設定ファイルを引数に指定します。
> pcluster create multi-cluster -c multi-cluster
CloudWatchからメトリクス確認
クラスターが作成されヘッドノード(Name: MultiQueue-Cluster)と、ジョブを投げてコンピューノード(Name: Compute)を起動させました。
メモリ使用率を確認できます。メモリ使用率は標準メトリクスでは取得できないためCloudWatchAgentに追加設定が必要になりました。
おわりに
ヘッドノード、コンピューノードのサイジング時に活用できるのではないでしょうか。CloudWatchAgentの設定はParallelClusterに依存するわけではありません。今回のメモリ使用率、ディスクI/O以外も設定可能です。 Postinstallの処理はヘッドノードだとクラスター構築時の初回のみ、コンピューノードは起動後に終了(Terminate)されるため毎回インスタンス起動時に走ります。
以上、網走の大村@コンサル部でした。